14.01.2015

    Кооперация процессов-
    Основные причины для объединения усилий процессов:
  1. повышение скорости решения задач (пока один процесс ждет события, другие могут заняться какой-то работой)
  2. совместное использование данных
  3. модульная конструкция системы
  4. для удобства работы пользователя
    Средства обмена информации бывают:
  1. сигнальные - задается мин. кол-во бит (да или нет)
  2. канальные - общение происходит через линии связи (общение с помощью записок)
  3. разделяемая память - могут использоваться в некоторой облсти адресного пространства

созданием памяти занимает ос

симплексные - в одну сторону полудуплексные - в одну сторону

дуплексные - одновременно в две стороны могут передаваться

Буфер может быть разным

    Буферизация 3 варианта:
  1. Буфер нулевой емкости - буфер отсутствует инфа не может сохраняться он переходит в состояние ожидания
  2. Буфер ограниченной емкости - размер буфера равен n и больше этого объема инфы хранить не может.
  3. Буфер неограниченной емкости - теоретически это возможно, но практически, это врятли реализуемо. Процесс ждет своей очереди и приема.

Для того, чтобы правильно организовать работу буфера есть

    Две модели передачи данных по каналам связи:
  1. поток ввода вывода - поток байтов, которые он воспренимает и интерпретирует
  2. сообщения

поток связи называют трубкой pipe, fifo

когда мы отправляет инфу сообщениями вся инфа делится на кусочки фикс. размера при передачи инфы между процессами , нужно продумать то , что канал связи должен быть надежным

нэрзед коды - кодирование по завершению процесса.

Есть у нас сообщение с правильной чек суммой

    программа:
  1. ожидание ввода А
  2. ожидание ввода В
  3. ожидание ввода С

ввести массив А
А= А+В
С=А+С
вывести массив С
Ожидание вывода С

Нити исполнения - это процессы, одного процесса.
Нить 1 должна создать 2 нить.
нить помощника для исполнения задания между нитями есть нить переключения контекста. Нить 2. Нить А и Б.

Пусть нить 1
Ввести нить А.
в это время вторая нить цже посчитает сумму А и Б.
Пока она считает возвращаемся к первой.
переключения контекста в некоторых случаях мы можем только выиграть

Различают Ос поддерживающие нити на уровне ядра и на уровне библиотек. Мало ОС , которые поддерживают функции на уровне библиотек. (блокирование 1 нити приводит к блокированию всех нитей) алгоритмы синхронизации - interleaning, race condition.

Активность действия, которые нужно выполнить для получения результата (определенной цели). могут быть как в программе, так и в жизни людей. Активности бывают делимые и неделимые. Состоят из операций делемых и неделимых.
неделимые называются -(атомарные) Активность P с операциями и активность B. При выполнении они могут чередоваться.

Чередование - это interleaning

  1. активность состоит из операция A B C
  2. активность из D E F

Не всегда нам выгодно чередование, иногда нам необходим один и тот же результат. Если у нас операции не будут чередоваться 1 2

P:x=2 Q:x=3
y=x-1 y=x+1
(xy):(2,1)(3,4) (xy): (2,3),(3,2)

Детерменирован набор всякий раз при псевдопараллельном исполнении для одного и того же набора входных данных дает одинаковые выходные данные. В противном случае такой набор называется недетерменированным.

При недетменированном наборе программ, говорят что он не race condition состояние гонки и состояние состязания.

механизм взаимоисключения- если 1 получил доступ , другой получить доступ не может Критические секции - суть состояит в том, что если я получила доступ к каким-то ресурсам я блокирую доступ к этим ресурсам. другие ресурсы ожидают освобождение ресурса.

часть программы исполнение которойможет привести к возникновению race condition для определенного набора программ, чтобы исключить эффект фона какому-то ресурсу необходимо организовать работу так, чтобы в каждый момент времени только один процесс мог находиться в своей критической секции связанной с этим ресурсом Критическую секцию можно описать с помощью цикла

while(some condition) {
  entry section;
  crition section;
  exit section;


 remainder section;
}

результат всегда будет один и тот же

программные алгоритмы организации взаимодействия процессов: мы отправляем прерывание

  1. алгоритм - "запрет прерывание"
    while (some condition) {
      запрещать section;
      разрешить прерывание;
      remainder section;
    }

    если значение замка 1 - ждем пока значение не станет 0.
  2. алгоритм - "переменная замок" shared int lock=0.
    Если процесс протестировал процесс lock
    Все операции должны быть атомарными.

    Флаги готовности
    shared int ready[2] = {0,0}
    Как i процесс готов войти в критическую секцию он меняет на 1.

флаги готовности , когда i - ый процесс, готов войти в критическую секцию, он присваивает ready i - значение равное 1, после выхода он сбрасывает значение в 0. Процесс не сбрасывает, если он уже готов.

while(some section){
  ready[i] = 1;
    while(ready[i+1]);
    critied section;
    ready[i] =0;
    remainder section;

}

while(some section){
  ready[i] = 1;
    while(ready[i+1]);
    critied section;
    ready[i] =0;
    remainder section;
}

пусть процессы одновременно произошли к выполнению пролога, после выполнения присваивания планировщик передал процессор такая ситуация называетя тупиковой или d=0
1 процесс не может ввойти, потому что другой ждет они будут бесконечно долго друг друга ждать такая ситуация называется тупиковой.

Одна тупиковая ситуация может привести к зависанию тупиковой ситуации. Множество процессов находится в тупиковой ситуации.

18-19 февраля экзамен по ФОС.

Множество процессов находятся в тупиковой ситуации , если каждый процесс ожидает событие, которое может вызвать только друго процесс данного множества, т.к. оба процесса ожидают они не смогут уступить (зависание)

    Условия возникновениятупиков:
  1. Условие взаимоисключения - т.е. одновременно один и тот де ресурс может использовать только один процесс, Мы используем взаимоисключения для того, чтобы не возникло состояний гонки.
  2. Условие ожидания ресурсов - hold and wait процесс вытается запрашивать другой ресурс
  3. Условие неперераспределяемости -no preemtion
  4. Условие кругового ожидания круговое ожидание - освобождение ресурсов другими процессами.

!!!КНИЖКА КАРПОВА (ПРИМЕР С ПИВОМ по ФОС)

    Основные направления борьбы с тупиками:
  1. Игнор проблемы (свернуть, запустить заново)
  2. предотвращение тупиков (алгоритм банкира)
  3. восстановление тупиков
  4. .....?

Безопасное состояние, которое не приведет к взаимоблокировке. Пример надежного состояния для системы с 3 пользователями: текущая ситуация такова,

Макс передача раздача
макс.
потребность
Ради
ресурсов
1 9 6
2 10 2
3 2 3
мы можем поделиться ресурсами сначало с 3 Мы должны доверять клиентам, чтобы доверять процессы. Способы предотвращения обнаружение тупиков R1---->R3 ^ | | | | V ____ | R3 |P4| -->P2 | ---- ^ | | V V <-------------R5 -->

P - процесс

R - ресурс

R1ждет пока lock=0

Тупиковые ситуации можно обнаруживать с помощью построения графов.

самый простой способ выйти из тупика - убить процесс.

Завтра мы будем проходить симафоры (алгоритм обедающего философа)
семафоры

Завтра мы будем проходить симафоры (алгоритм обедающего философа)